// let a = 54;
// a=a<<2
// console.log(`object`, a)
// console.log(`object`, a.toString(2))
// let str = `
// let a = 54;
// let x = 2
// a<<x == 54+(x*54)
// `
// console.log(`str`, str)
// var values = [1,2,3,4,5]; 
// var sum = values.reduce(function(prev, cur, index, array){ 
//  return prev + cur; 
// });
// var values = [{
//     a:1,
// },{
//     a:3,
// }]; 
// var sum = values.reduce(function(prev, cur, index, array){ 
//  return {a:prev.a + cur.a}; 
// });
// console.log(`sum`, sum)

// var text = "mom and dad and baby"; 
// var pattern = /mom( and dad( and baby)?)?/gi; 
// var matches = pattern.exec(text); 

// var text = "cat, bat, sat, fat"; 
// var pattern1 = /asat/; 
// var matches = pattern1.exec(text);
// console.log(`matches.index`, matches)
// alert(matches.index); // 0 
// alert(matches.input); // "mom and dad and baby" 
// alert(matches[0]); // "mom and dad and baby" 
// alert(matches[1]); // " and dad and baby" 
// alert(matches[2]); // " and baby
// function outer(){ 
//     let a= 1;
//     console.log(`a`, a)
//     console.log(`a`, arguments.callee)
//    } 
   
//    outer(1,2);

// var arr = [{
//     "name":1
// },
// {
//     "name":2
// },
// {
//     "name":1
// },
// ];
 
// arr = arr.reduce(function(item, next) {
//     obj[next.name] ? '' : obj[next.name] = item.push(next);
//     //讲解 三元表达式 
//     /*
//     如果存在就返回空字符串不做任何处理
//     如果不存在 就给初始值添加一个值 并且吧新数组的长度返回给当前的obj对象用来记录当前key已经存在了
//     */
//     return item;
// },[]);
// let obj = {};
// nums.forEach(element => {
//     obj[element]? obj[element]++: obj[element]=1
// });
// let arr = []
// for(const e in obj){
//     if(obj[e]>1){
//         arr.push(e) 
//     }
// }
// return arr
// 
console.log(`NODE_`,process.env.NODE_ENV)